<?php
require_once(Config::acquire('Model', null, 'model'));
/**
 * Created by JetBrains PhpStorm.
 * User: Sander
 * Date: 29-6-11
 * Time: 15:22
 * To change this template use File | Settings | File Templates.
 */

class Netwerk extends Model
{

    /**
     * initialiseren variabelen
     */
    private $id;
    private $naam;
    private $locatie;
    private $soort;


    /**
     * aanmaken van de vriabelen
     */
    public function __construct($id, $naam, Locatie $locatie, $soort)
    {
        $this->id = $id;
        $this->naam = $naam;
        $this->locatie = $locatie;
        $this->soort = $soort;
    }


     /**
     * Query voor deleten van de gegevens uit de gegeven tabel
     */
    public function delete()
    {
        SQL::execute("DELETE FROM `netwerk` WHERE `Netwerk_ID` = {$this->id}");
        SQL::execute("DELETE FROM `netwerk_hw` WHERE `Netwerk_ID` = {$this->id}");
    }

      /**
     * gegevens naar een array schrijven.
     */
    public function toArray()
    {
        return array(
            "ID" => $this->id,
            "Naam" => $this->naam,
            "Locatie_ID" => $this->locatie->getID(),
            "Locatie_Naam" => $this->locatie->getNaam(),
            "Soort" => $this->soort
        );
    }

     /**
     * Query voor het updaten van de betreffende tabel
     */
    public function update()
    {
        if (!is_null($this->id)) {
            SQL::execute("UPDATE `netwerk`
                      SET
                          `Netwerk_Naam` = '{$this->naam}',
                          `Locatie_ID` = '{$this->locatie->getID()}',
                          `Soort` = '{$this->soort}'
                      WHERE `Netwerk_ID` ={$this->id}");
        } else {
            SQL::execute("INSERT INTO `netwerk` (
                            `Netwerk_ID`, `Netwerk_Naam`, `Locatie_ID`, `Soort`)
                             VALUES (NULL ,
                              '{$this->naam}',
                              '{$this->locatie->getID()}',
                              '{$this->soort}')");


        }
    }

     /**
     * aanmaken van een nieuw item
     */
    public static function create($id, $naam, Locatie $locatie, $soort)
    {
        return new Netwerk($id, $naam, $locatie, $soort);
    }


    /*
     * lezen van de gegvens van 1 enkel item
     */
    public static function read($id)
    {
        $netwerk = SQL::query("SELECT * FROM `netwerk` WHERE `Netwerk_ID` = $id");

        if ($netwerk->isValid()) {
            return Netwerk::create(
                $netwerk->fetchField('Netwerk_ID'),
                $netwerk->fetchField('Netwerk_Naam'),
                Locatie::read($netwerk->fetchField('Locatie_ID')),
                $netwerk->fetchField('Soort'));
        } else {
            return null;
        }
    }

     /**
     * Lezen van de gegevens in een tabel
     */
    public static function readAll()
    {
        $list = array();
        $netwerk = SQL::query("SELECT * FROM `netwerk`");
        while ($netwerk->isValid()) {
            $list[] = Netwerk::create(
                $netwerk->fetchField('Netwerk_ID'),
                $netwerk->fetchField('Netwerk_Naam'),
                Locatie::read($netwerk->fetchField('Locatie_ID')),
                $netwerk->fetchField('Soort'));

            $netwerk->next();
        }
        return $list;
    }

     /**
     * Setters & getters
     */
    public function setId($id)
    {
        $this->id = $id;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setLocatie($locatie)
    {
        $this->locatie = $locatie;
    }

    public function getLocatie()
    {
        return $this->locatie;
    }

    public function setNaam($naam)
    {
        $this->naam = $naam;
    }

    public function getNaam()
    {
        return $this->naam;
    }

    public function setSoort($soort)
    {
        $this->soort = $soort;
    }

    public function getSoort()
    {
        return $this->soort;
    }
}
